// 去重复, 包括单纯的数据去重和对象去重. 

// 单数据数组去重
// 方法一: 
let nums = [1, 2, 3, 4,5, 6,9 ,7 , 7, 8, 8]
let newNums1 = [...new Set(nums)]
console.log(newNums1);


// 方法二; 
let newNums2 = nums.map(item => {
    return nums.indexOf(item) > -1? null : item
})

console.log(newNums2);



// 方法三:要开辟重复的空间. 
function uniqueNums3(nums){
    if(!Array.isArray(nums)) return
    let result = []
    for(let i =0; i< nums.length; i++) {
        if(result.indexOf(nums[i])<0){
            result.push(nums[i])
        }
    }
    return result
}
const res3 = uniqueNums3(nums)
console.log(res3);


// 方法四: 
function uniqueNums4(nums){
    if(!Array.isArray(nums))return
    
    for(let i=0; i< nums.length; i++) {
        for(let j =i+1; j<nums.length; j++) {
            if(nums[i] === nums[j]) {
                // console.log(true);
                // 这里用得失splice(), 而不是slice(),这个是切片需要返回值的. 
                nums.splice(j,1)
            }
        }
    }
    return nums
}
const res4 = uniqueNums4(nums)
console.log(res4);


// 方法五:
function uniqueNums5(nums) {
    if(!Array.isArray(nums)) return

    nums = nums.sort((a,b) => a -b)
    for(let i=0; i< nums.length; i++) {
        if(nums[i] === nums[i+1]) {
            nums.splice(i, 1)
        }
    }
    return nums
}
const res5 = uniqueNums5(nums)
console.log('res5',res5);


// 方法六:
function uniqueNums6(nums){
    if(!Array.isArray(nums)) return
    let result = []
    for(let i =0; i< nums.length; i++) {
        if(!result.includes( nums[i])){
            result.push(nums[i])
        }
    }
    return result
}
const res6 = uniqueNums6(nums)
console.log('res6', res6);


// 方法六: filter
function uniqueNums7(nums) {
    if(!Array.isArray(nums)) return 

    return nums.filter((item, index, arr) => {
        return arr.indexOf(item,0) === index
    })
}


const res7 = uniqueNums7(nums)
console.log('res7', res7);
